package packet

import (
	"encoding/hex"
	"hy_808/protocol/hygprs"
	"strings"
	"time"
)

type PA071 struct {
	hygprs.Fields
}

// 查询设备信息 主要用户查询设备版本号
/**
reqType 0x43项 请求类别:
	0x01请求车辆加油计数据;
	0x02 请求车载设备的当前月视频时长、流量
	0x03 请求车载设备程序的版本信息
	0x04 请求CAN数据
	0x05 请求磁盘当日使用量
	0x06 请求当月SIM卡总流量
	0x07 请求SI号
	0x08 请求EI号
	0x09 请求广告文件名
	0x0A 请求一体机可变参数
	0x0B 设置一体机可变参数
	0x0C 请求一体机日志文件
	0x0D 请求报站器配置及线路文件
	0x0E 设置线路号
	0x0F请求车载机内未上传的交易数量
	0x10 请求视频文件名和大小（请求的参数具体见0x12项）
	0x11 请求一体机视频文件（单文件）(请求的参数具体见0x12项，ftp相关选项同请求 一体机日志文件)
	0x12 请求GPS原始数据
	0x13 请求SIM卡识别码ICCID数据
	0x14设置车牌号（车牌号放置在0x12项）
	0x15设置线路名（线路名放置在0x12项）
	0x16 请求LED屏中的广告
	0x17 设置通道名称（通道名称放置在0x12项，目前支持8通道，通道名之间用分号分隔，
	通道名可以为空）
			0x18 上传间隔设置(危险品主机 详见危险品文档)
			0x19 危险品阈值设置(详见危险品文档)
			0x1A 请求车载设备的当前日流量
			0x1B  设置一体机通用ftp路径
			0x1C  设置陀螺仪上传阈值
	0x1D  设置陀螺仪上传间隔设置
	//zhangrog 20200217 增加恒宇ADAS远程设置基本参数的协议
	0x1E 设置恒宇ADAS车辆信息等基本参数
	0x1F 请求恒宇ADAS车辆信息等基本参数
	0x20 设置恒宇ADAS SDK相关功能参数
	0x21 请求恒宇ADAS SDK相关功能参数
	0x2A 设置一体机司机姓名（司机姓名放12项）
		  其它数据值需要根据需求再定）
*/
func GenA071Packet(line, bus, operator uint32, reqType byte) PA071 {
	data, _ := hex.DecodeString(strings.ReplaceAll("A0 00 40 02 00 4E 71 01 00 00 00 34 02 00 00 2C 8D 04 00 01 86 A8 06 C0 39 C6 BB 43 03 44 00 45 00 49 00 00 00 00 48 00 00 00 00 4B 00 00 46 00 00 00 00 47 00 00 00 00 1A 01 12 00 00 08 A9 A1", " ", ""))
	p := PA071{hygprs.MakeFields(hygprs.MakePacket(data))}
	p.SetSerialNumber() //设置包序号
	p.SetLineID(line)
	p.SetBusID(bus)
	p.SetOperatorID(operator)
	p.SetUnix(uint32(time.Now().Local().Unix()))
	//设置请求类别
	p.SetByte(0x43, reqType)
	//一体机可变参数类别
	p.SetByte(0x44, 0)
	//一体机可变参数标志
	p.SetByte(0x45, 0)
	//一体机可变参数值
	p.SetUint32(0x49, 0)
	//FTP服务器IP地址 4个字节IP
	p.SetUint32(0x48, 0)
	//FTP服务器端口 2字节端口号
	p.SetUint32(0x4b, 0)
	//FTP用户名 4字节ASCII码
	p.SetUint32(0x46, 0)
	//FTP密码 4字节ASCII码
	p.SetUint32(0x47, 0)
	//是否需要回应
	p.SetByte(0x1a, 1)
	//0x12项内容
	p.SetBytes(0x12, []byte{})
	p.Pack()
	return p
}

func ParseA071Packet(data []byte) PA071 {
	p := PA071{hygprs.MakeFields(hygprs.MakePacket(data))}
	return p
}
